package teste.sistema;

import java.util.ArrayList;
import java.util.List;

import objetos.Mensagem;
import objetos.Usuario;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import sistema.GerenciadorDeMensagens;

public class TestGerenciadorDeMensagem {

	private Usuario usuarioUm;
	private Usuario usuarioDois;
	private Usuario usuarioTres;
	private Mensagem mensagemUm;
	private Mensagem mensagemDois;
	private Mensagem mensagemTres;
	private Mensagem mensagemQuatro;
	private Mensagem mensagemCinco;
	private GerenciadorDeMensagens g;
	private List<Mensagem> listaMensagensEnviadas;
	
	@Before
	public void setUp() throws Exception {
		this.usuarioUm = new Usuario("Usuario1", "UsuarioUm", "Endereco1");
		this.usuarioDois = new Usuario("Usuario2", "UsuarioDois", "Endereco2");
		this.usuarioTres = new Usuario("Usuario3", "UsuarioTres", "Endereco3");
		this.mensagemUm = new Mensagem("Assunto Mensagem Um", "Corpo da Mensagem Um", this.usuarioDois, this.usuarioUm);
		this.mensagemDois = new Mensagem("Assunto Mensagem Dois", "Corpo da Mensagem Dois", this.usuarioTres, this.usuarioDois);
		this.mensagemTres = new Mensagem("Assunto Mensagem Tres", "Corpo da Mensagem Tres", this.usuarioUm, this.usuarioTres);
		this.mensagemQuatro = new Mensagem("Assunto Mensagem Tres", "Corpo da Mensagem Quatro", this.usuarioUm, this.usuarioTres);
		this.mensagemCinco = new Mensagem("Assunto Mensagem Tres", "Corpo da Mensagem Cinco", this.usuarioUm, this.usuarioTres);
		this.listaMensagensEnviadas = new ArrayList<Mensagem>();
		this.mensagemUm.getDataDeEnvio().addDias(1);
		this.mensagemDois.getDataDeEnvio().addDias(2);
		this.mensagemTres.getDataDeEnvio().addDias(3);
	}
	
	@Test
	public void verificaGetMensagensEnviadasRecebidas(){
		this.listaMensagensEnviadas.add(this.mensagemUm);
		g.enviarMensagem(this.mensagemUm);
		Assert.assertEquals(this.listaMensagensEnviadas, g.getTodasAsMensagens(usuarioUm));
		this.listaMensagensEnviadas.clear();
		this.listaMensagensEnviadas.add(this.mensagemDois);
		g.enviarMensagem(this.mensagemDois);
		Assert.assertEquals(this.listaMensagensEnviadas, g.getTodasAsMensagens(usuarioUm));
		this.listaMensagensEnviadas.clear();
		this.listaMensagensEnviadas.add(this.mensagemTres);
		g.enviarMensagem(this.mensagemTres);
		Assert.assertEquals(this.listaMensagensEnviadas, g.getTodasAsMensagens(usuarioUm));
	}

	
	@Test
	public void verificaTopicos() throws Exception{
		this.listaMensagensEnviadas.add(mensagemTres);
		this.listaMensagensEnviadas.add(mensagemQuatro);
		this.listaMensagensEnviadas.add(mensagemCinco);
		g.enviarMensagem(mensagemTres);
		g.enviarMensagem(mensagemQuatro);
		g.enviarMensagem(mensagemCinco);
		Assert.assertEquals(this.listaMensagensEnviadas , g.organizarTopicos(g.getTodasAsMensagens(usuarioUm)).get(mensagemTres.getAssunto()));
	}
	
}
